package com.sinai.mshab.widgets;

import java.util.HashMap;

import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.Widget;

/**
 * The purpose of this TabPanel implementation is to fire off history tokens
 * when a tab is clicked.
 * 
 * @author serge
 * 
 */
public class NotifyingTabPanel extends LazyTabPanel {

	private HashMap<Widget, String> contentToHistory = new HashMap<Widget, String>();

	/**
	 * Adds a widget to the panel with another widget to go in the tab.
	 * @param contentWidget the widget to go to the bottom content container of the panel.
	 * @param tabWidget the widget to go to the tab users click on.
	 * @param history the history token to throw when this tab is selected.
	 */
	public void add(Widget contentWidget, Widget tabWidget, String history) {
		contentToHistory.put(contentWidget, history);
		super.add(contentWidget, tabWidget);
	}

	/**
	 * Adds a widget to the panel with a text label tab.
	 * @param contentWidget the widget to go to the bottom content container of the panel.
	 * @param tabText the text to go into the tab that the users click on.
	 * @param history the history token to throw when this tab is selected.
	 */
	public void add(Widget contentWidget, String tabText, String history) {
		contentToHistory.put(contentWidget, history);
		super.add(contentWidget, tabText);
	}
	
	/**
	 * This method get's called after the tab has been succesfully selected.
	 */
	public void afterTabSelected(int index) {
		Widget widget = this.getWidget(index);
		String token = contentToHistory.get(widget);
		if (token != null) {
			History.newItem(token);
		}
	}
}
